Spring Data JPA হল Spring Framework-এর একটি অত্যন্ত শক্তিশালী মডিউল, যা JPA (Java Persistence API) ব্যবহার করে ডেটাবেস অপারেশন সহজ করে। Spring Data JPA, Spring Boot-এর সঙ্গে মিলে দ্রুত এবং কার্যকরভাবে RESTful API তৈরি করতে সাহায্য করে।
এখানে আমরা একটি সাধারণ Spring Data JPA অ্যাপ্লিকেশন তৈরি করব এবং একটি REST API তৈরি করব, যা ডেটাবেস থেকে তথ্য এনে ক্লায়েন্টকে রেসপন্স করবে।
Spring Boot প্রজেক্ট তৈরি করতে, Spring Initializr ব্যবহার করুন (https://start.spring.io/)। এখানে কিছু প্রাথমিক ডিপেন্ডেন্সি নির্বাচন করতে হবে:
Spring Boot প্রজেক্টে ডিপেন্ডেন্সি যোগ করা যেটি আপনার pom.xml
ফাইলে থাকবে।
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
application.properties
ফাইলে ডাটাবেস কনফিগারেশন সেট করতে হবে। এখানে H2 ডাটাবেসের কনফিগারেশন দেওয়া হলো:
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.h2.console.enabled=true
এটি H2 ডাটাবেসে কাজ করবে এবং অ্যাপ্লিকেশন রান করার সময় ডাটাবেসের কনসোল দেখতে পারবেন।
JPA Entity ক্লাস তৈরি করতে হবে, যা ডাটাবেস টেবিলের সঙ্গে সম্পর্ক স্থাপন করবে। উদাহরণস্বরূপ, একটি Product
Entity তৈরি করা:
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private Double price;
// Getters and Setters
}
এখানে @Entity
অ্যানোটেশন ডেটাবেস টেবিলের জন্য Entity ক্লাসকে নির্দেশ করে এবং @Id
হল Primary Key।
Spring Data JPA এর সাহায্যে ডেটাবেস অপারেশন সহজ করতে JpaRepository ইন্টারফেস ব্যবহার করা হয়। এটি CRUD (Create, Read, Update, Delete) অপারেশনগুলো অ্যাক্সেস করতে সাহায্য করবে।
import org.springframework.data.jpa.repository.JpaRepository;
public interface ProductRepository extends JpaRepository<Product, Long> {
// Custom query methods (if any) can be added here
}
এটি Product
Entity এর জন্য ডেটাবেস অপারেশন সমর্থন করবে।
REST API-এর business logic সম্পাদন করতে একটি Service Layer তৈরি করা হয়। এখানে ProductService
ক্লাসটি তৈরি করা হবে, যা ডেটাবেস থেকে তথ্য নিয়ে আসবে।
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class ProductService {
@Autowired
private ProductRepository productRepository;
public List<Product> getAllProducts() {
return productRepository.findAll();
}
public Product getProductById(Long id) {
return productRepository.findById(id).orElse(null);
}
public Product createProduct(Product product) {
return productRepository.save(product);
}
public Product updateProduct(Long id, Product product) {
product.setId(id);
return productRepository.save(product);
}
public void deleteProduct(Long id) {
productRepository.deleteById(id);
}
}
RESTful API তৈরি করার জন্য Controller তৈরি করা হয়, যা HTTP রিকোয়েস্ট গ্রহণ করে এবং সঠিক সাড়া পাঠায়।
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/api/products")
public class ProductController {
@Autowired
private ProductService productService;
@GetMapping
public List<Product> getAllProducts() {
return productService.getAllProducts();
}
@GetMapping("/{id}")
public Product getProductById(@PathVariable Long id) {
return productService.getProductById(id);
}
@PostMapping
public Product createProduct(@RequestBody Product product) {
return productService.createProduct(product);
}
@PutMapping("/{id}")
public Product updateProduct(@PathVariable Long id, @RequestBody Product product) {
return productService.updateProduct(id, product);
}
@DeleteMapping("/{id}")
public void deleteProduct(@PathVariable Long id) {
productService.deleteProduct(id);
}
}
এখানে @RestController
অ্যানোটেশনটি API Controller-কে নির্দেশ করে এবং HTTP মেথডের মতো @GetMapping
, @PostMapping
, @PutMapping
, @DeleteMapping
ব্যবহার করা হয় রিকোয়েস্ট গুলোকে ম্যানেজ করতে।
Spring Boot অ্যাপ্লিকেশন চালানোর জন্য, @SpringBootApplication
অ্যানোটেশন ব্যবহার করা হয়:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
এটি Spring Boot অ্যাপ্লিকেশন চালু করবে এবং আপনি API রিকোয়েস্ট পাঠাতে পারবেন।
এখন, আপনি Spring Data JPA ব্যবহার করে একটি পূর্ণ REST API তৈরি করতে সক্ষম হয়েছেন, যেখানে:
Product
Entity ডেটাবেস টেবিলের সঙ্গে সম্পর্কিত।ProductRepository
Spring Data JPA এর সাহায্যে CRUD অপারেশন পরিচালনা করে।ProductService
business logic সম্পাদন করে।ProductController
API endpoints পরিচালনা করে।এই REST API অন্যান্য ক্লায়েন্ট (যেমন Angular, React বা Postman) দ্বারা ব্যবহার করা যেতে পারে ডেটা পেতে বা ডেটা পাঠাতে।
Read more